local newt = reload("newt")
local delt = reload("delt")
local other = require("other")
local class = reload("class")
local super = reload("super.basic")
local midws = reload("global.midws")
local insert = reload("mysql.insert")
local batlog = reload("mysql.batlog")
local sec2date = reload("time.fmtDate")
local petCfg = reload("config.petConfig")
local itemCfg = reload("config.itemConfig")
local moneyCfg = reload("config.moneyConfig")


---@class sqllog : super.basic @sqllog类
local this = class(super)

function this:ctor()
    super.ctor(self)
end

function this:launch(carg)
    super.launch(self)
    ---获取批量标识
    local key = string.format("global:hash:%d:data", midws.rdb._info.zone)
    midws.rdb.hget(key, "sqllog:globalSort", carg.coback, carg)
    local str = carg:await()
    self.cid = tonumber(str) or 0

    ---生成宠物日志-批量插入
    self.pet = batlog(insert, "tbl_log_pet", {
        cid = 1,    ---批量标识
        mapid = 2,  ---地图ID
        x = 3,      ---坐标X
        y = 4,      ---坐标Y
        z = 5,      ---坐标Z
        d = 6,      ---方向
        cdkey = 7,  ---归属玩家
        level = 8,  ---玩家等级
        rname = 9,  ---玩家名称
        cfgid = 10, ---宠物ID
        cname = 11, ---宠物名称
        cuuid = 12, ---宠物编码
        lcgid = 13, ---宠物lcg
        randm = 14, ---随机次数
        cause = 15, ---操作原因
        cdate = 16, ---创建时间
    })

    ---生成道具日志-批量插入
    self.item = batlog(insert, "tbl_log_item", {
        cid = 1,    ---批量标识
        mapid = 2,  ---地图ID
        x = 3,      ---坐标X
        y = 4,      ---坐标Y
        z = 5,      ---坐标Z
        d = 6,      ---方向
        cdkey = 7,  ---归属玩家
        level = 8,  ---玩家等级
        rname = 9,  ---玩家名称
        cfgid = 10, ---道具ID
        cname = 11, ---道具名称
        count = 12, ---操作数量
        cleft = 13, ---剩余数量
        cuuid = 14, ---道具编码
        lcgid = 15, ---道具lcg
        randm = 16, ---随机次数
        cause = 17, ---操作原因
        cdate = 18, ---创建时间
    })


    ---生成货币日志-批量插入
    self.money = batlog(insert, "tbl_log_money", {
        cid = 1,    ---批量标识
        mapid = 2,  ---地图ID
        x = 3,      ---坐标X
        y = 4,      ---坐标Y
        z = 5,      ---坐标Z
        d = 6,      ---方向
        cdkey = 7,  ---归属玩家
        level = 8,  ---玩家等级
        rname = 9,  ---玩家名称
        cfgid = 10, ---货币ID
        cname = 11, ---货币名称
        count = 12, ---操作数量
        cleft = 13, ---剩余数量
        cause = 14, ---操作原因
        cdate = 15, ---创建时间
    })
end

---更新凭证标识
function this:cookid()
    local old = self.cid
    self.cid = old + 1
    local now = other.nowsec()
    self.date = sec2date(now)

    ---更新批量标识
    local key = string.format("global:hash:%d:data", midws.rdb._info.zone)
    midws.rdb.hset(key, "sqllog:globalSort", self.cid)
end

function this:charArgs(ch)
    local args = newt()
    table.insert(args, self.cid) ---批量标识
    table.insert(args, ch.mapid) ---地图ID
    table.insert(args, ch.x)     ---坐标X
    table.insert(args, ch.y)     ---坐标Y
    table.insert(args, ch.z)     ---坐标Z
    table.insert(args, ch.d)     ---方向
    table.insert(args, ch.cdkey) ---归属玩家
    table.insert(args, ch.level) ---玩家等级
    table.insert(args, ch.name)  ---玩家名称
    return args
end

function this:petLog(ch, pet, cause)
    local args = self:charArgs(ch)
    local cfg = petCfg[pet.id]
    table.insert(args, cfg.id)    ---宠物ID
    table.insert(args, cfg.name)  ---宠物名称
    table.insert(args, cause)     ---操作原因
    table.insert(args, pet.uuid)  ---宠物编码
    table.insert(args, pet.lcgid) ---宠物lcg
    table.insert(args, pet.randm) ---随机次数
    table.insert(args, self.date) ---创建时间
    self.pet(table.unpack(args))
    delt(args)
end

function this:itemLog(ch, item, count, cleft, cause)
    local args = self:charArgs(ch)
    local cfg = itemCfg[item.id]
    table.insert(args, item.id)    ---道具ID
    table.insert(args, cfg.name)   ---道具名称
    table.insert(args, count)      ---操作数量
    table.insert(args, cleft)      ---剩余数量
    table.insert(args, cause)      ---操作原因
    table.insert(args, item.uuid)  ---道具编码
    table.insert(args, item.lcgid) ---道具lcg
    table.insert(args, item.randm) ---随机次数
    table.insert(args, self.date)  ---创建时间
    self.item(table.unpack(args))
    delt(args)
end

function this:moneyLog(ch, id, count, cleft, cause)
    local args = self:charArgs(ch)
    local cfg = moneyCfg[id]
    table.insert(args, id)        ---货币ID
    table.insert(args, cfg.name)  ---货币名称
    table.insert(args, count)     ---操作数量
    table.insert(args, cleft)     ---剩余数量
    table.insert(args, cause)     ---操作原因
    table.insert(args, self.date) ---创建时间
    self.money(table.unpack(args))
    delt(args)
end

return this

--[[

    global:hash:zone:data = {
        ["sqllog:globalSort"] = 自增标识
    }

]]
